package com.gitee.cnlongdb.basic.entity.query;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 系统名称：LongDbJoinWhere.java
 * 模块名称：
 * 模块描述：关联查询实体类
 * 功能列表：
 * 模块作者：ZOUYONG
 * 开发时间：2018年12月5日 下午9:55:55
 * 模块路径：com.gitee.cnlongdb.basic.entity.query.LongDbJoinWhere
 * 更新记录：
 */
public class LongDbJoinWhere {
	
	// 要关联查询的表名称
	private String whereTableName;
	
	// 表名称
	private String joinTableName;

	// 关联的查询对象
	private List<LongDbWhere> onWhereList = new ArrayList<LongDbWhere>();

	// 关联的查询对象
	private List<LongDbWhere> andWhereList = new ArrayList<LongDbWhere>();
	
	// 查询出字段别名设置
	private Map<String, String> aliasMap = new HashMap<String, String>();
	
	public LongDbJoinWhere() {}
	
	public LongDbJoinWhere(String whereTableName, String joinTableName) {
		this.whereTableName = whereTableName;
		this.joinTableName = joinTableName;
	}
	
	/**
	 * 功能描述：定义要连接查询的对象
	 * 模块作者：ZOUYONG
	 * 开发时间：2018年12月1日 上午10:46:10
	 * 更新记录：
	 * 返回数据：LongDbJoinWhere
	 */
	public static LongDbJoinWhere join(String whereTableName, String joinTableName) {
		return new LongDbJoinWhere(whereTableName, joinTableName);
	}

	/**
	 * 功能描述：要查询关联的字段
	 * 模块作者：ZOUYONG
	 * 开发时间：2018年12月1日 上午11:11:42
	 * 更新记录：
	 * 返回数据：LongDbJoinWhere
	 */
	public LongDbJoinWhere on(LongDbWhere dbWhere) {
		onWhereList.addAll(Arrays.asList(dbWhere));
		return this;
	}

	/**
	 * 功能描述：添加要查询关联的字段
	 × 模块作者：ZOUYONG
	 × 开发时间：2018年12月3日 上午11:15:42
	 × 返回数据：LongDbJoinWhere
	 */
	public LongDbJoinWhere and(LongDbWhere dbWhere) {
		andWhereList.addAll(Arrays.asList(dbWhere));
		return this;
	}
	
	/**
	 * 功能描述：关联查询的属性设置别名
	 × 模块作者：ZOUYONG
	 × 开发时间：2018年12月5日 上午9:45:55
	 × 返回数据：LongDbJoinWhere
	 */
	public LongDbJoinWhere alias(String... columns) {
		String key = null; int start = 1;
		for(String column : columns) {
			if(start > 2) {
				start = 1;
			}
			if(start == 1) {
				key = column;
			}
			else {
				this.aliasMap.put(key, column);
			}
			start++;
		}
		return this;
	}

	/**
	 * 功能描述：关联查询的属性设置别名
	 × 模块作者：ZOUYONG
	 × 开发时间：2018年12月5日 上午9:53:51
	 × 返回数据：LongDbJoinWhere
	 */
	public LongDbJoinWhere alias(String key, String value) {
		this.aliasMap.put(key, value);
		return this;
	}

	/**
	 * 功能描述：关联查询的属性设置别名
	 × 模块作者：ZOUYONG
	 × 开发时间：2018年12月5日 上午9:53:51
	 × 返回数据：LongDbJoinWhere
	 */
	public LongDbJoinWhere alias(Map<String, String> aliasMap) {
		this.aliasMap.putAll(aliasMap);
		return this;
	}
	
	public String getWhereTableName() {
		return whereTableName;
	}

	public void setWhereTableName(String whereTableName) {
		this.whereTableName = whereTableName;
	}

	public String getJoinTableName() {
		return joinTableName;
	}

	public void setJoinTableName(String joinTableName) {
		this.joinTableName = joinTableName;
	}

	public List<LongDbWhere> getOnWhereList() {
		return onWhereList;
	}

	public void setOnWhereList(List<LongDbWhere> onWhereList) {
		this.onWhereList = onWhereList;
	}

	public List<LongDbWhere> getAndWhereList() {
		return andWhereList;
	}

	public void setAndWhereList(List<LongDbWhere> andWhereList) {
		this.andWhereList = andWhereList;
	}

	public Map<String, String> getAliasMap() {
		return aliasMap;
	}

	public void setAliasMap(Map<String, String> aliasMap) {
		this.aliasMap = aliasMap;
	}

}
